home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / dunquest.arc / DUNQUEST.BAS < prev    next >
Encoding:
BASIC Source File  |  1985-10-30  |  15.6 KB  |  468 lines

  1. 10 'DUNQUEST THE QUEST
  2. 20    DEFINT A-Z
  3. 30      SCREEN 3:KEY OFF:WIDTH 20:COLOR 1,4:CLS
  4. 40    LOCATE 1,1,0
  5. 50      LOCATE 4,1:PRINT "       THE"
  6. 60      LOCATE 7,1:PRINT "      QUEST"
  7. 70 'KILL TIME
  8. 80     SV.TIMER! = TIMER +2
  9. 90     IF TIMER <  SV.TIMER! THEN GOTO 90
  10. 100 'PRINT MENU
  11. 110     SCREEN 0:WIDTH 40:COLOR 0,4,4:CLS
  12. 120     LOCATE 3,1:PRINT "           THE QUEST"
  13. 130    RANDOMIZE TIMER
  14. 140    MX=INT(RND*9)+1: MNO$=STR$(MX)
  15. 150    MX=LEN(MNO$): MNO$=RIGHT$(MNO$,MX-1)
  16. 160     GOSUB 2830 'GET PLAYERS & LOAD PLAYER DATA
  17. 170     GOSUB 250 'LOAD MAP
  18. 180     GOSUB 630 "LOAD TABLES
  19. 190     GOSUB 3600 'PLACE MONSTERS & TREASURE
  20. 200     GOSUB 4360 'SETUP INITIAL LOCATION OF PLAYERS
  21. 210     FOR MX=1 TO 40
  22. 220       M.NBR(MX,1)=1: M.NBR(MX,2)=1
  23. 230     NEXT
  24. 240     CHAIN "DUNPLAY",10,ALL
  25. 250 'LOAD THE MAP
  26. 260    FID$ = "DUNMAP" + MNO$
  27. 270    OPEN FID$ FOR INPUT AS #3
  28. 280    DIM M(24,40) 'DUNGEON ARRAY
  29. 290    DIM R(10,6)  'ROOMS 1=TOP LEFT HOR,2=TOP LEFT VER,3=BOT RIGHT HOR,4=BOT                       RIGHT VERT,5=MONSTER,6=NBR OF MONSTERS
  30. 300    RX=0
  31. 310    GOSUB 340
  32. 320    CLOSE #3
  33. 330 RETURN
  34. 340 'FLAG THE ROOMS
  35. 350    INPUT #3,MX
  36. 360    IF MX=9999 THEN GOTO 410
  37. 370    RX=RX+1
  38. 380    R(RX,1)=MX
  39. 390    INPUT #3,R(RX,2),R(RX,3),R(RX,4)
  40. 400    GOTO 340
  41. 410 'LOAD THE MAP TO ARRAYS
  42. 420    INPUT #3,CT,ZZ
  43. 430    SCREEN 1:COLOR 2,0:CLS:PALETTE 1,2: PALETTE 2,0: PALETTE  3,0
  44. 440     PAINT (0,0),2,3
  45. 450    LOCATE 25,10: PRINT "PLEASE STAND BY";
  46. 460    FOR MV = 1 TO 24
  47. 470      FOR MH = 1 TO 40
  48. 480            IF CT=0 THEN INPUT #3,CT,ZZ
  49. 490            IF CT=9999 THEN GOTO 600
  50. 500            IF ZZ > 47 AND ZZ < 58 THEN ZZ = 32
  51. 510            IF MH> 40 THEN MV=MV+1: MH=1
  52. 520            M(MV,MH) = ZZ
  53. 530            IF ZZ=32 THEN GOTO 590
  54. 540            IF MV=24 THEN GOTO 590
  55. 550            H=(MH*8)-8: V=(MV*8)-8
  56. 560            IF ZZ=219 THEN LINE(H,V)-(H+7,V+7),3,BF
  57. 570            IF ZZ=179 THEN LINE(H+3,V)-(H+4,V+7),3,BF
  58. 580            IF ZZ=196 THEN LINE(H,V+4)-(H+7,V+4),3
  59. 590            CT=CT-1
  60. 600    NEXT MH
  61. 610    NEXT MV
  62. 620 RETURN
  63. 630 'LOAD TABLES
  64. 640    DIM SV(8002) 'SAVE THE CURRENT SCREEN
  65. 650    DIM TRAP$(6) 'TRAPS
  66. 660    DIM ML(100,4) ' MONSTER LOCATIONS V,H,ROOM,HIT POINTS
  67. 670    DIM D(3,3) 'OPEN DOORS
  68. 680    TRAP$(1)="POISON GAS"
  69. 690    TRAP$(2)="FOG "
  70. 700    TRAP$(3)="HIDDEN PIT"
  71. 710    TRAP$(4)="FALLING BLOCK TRAP"
  72. 720    TRAP$(5)="POISON NEEDLE TRAP"
  73. 730    TRAP$(6)="DART TRAP"
  74. 740     DIM M.NAME$(40)
  75. 750     M.NAME$(1)="BAT"
  76. 760     M.NAME$(2)="RAT"
  77. 770     M.NAME$(3)="WOLF"
  78. 780     M.NAME$(4)="CENTIPEDE"
  79. 790     M.NAME$(5)="BANDIT"
  80. 800     M.NAME$(6)="KOBOLD"
  81. 810     M.NAME$(7)="SKELETON"
  82. 820     M.NAME$(8)="GHOUL"
  83. 830     M.NAME$(9)="ZOMBIE"
  84. 840     M.NAME$(10)="GOBLIN"
  85. 850     M.NAME$(11)="MAN-LIZARD"
  86. 860     M.NAME$(12)="ORC"
  87. 870     M.NAME$(13)="WERERAT"
  88. 880     M.NAME$(14)="SNAKE"
  89. 890     M.NAME$(15)="BEAR"
  90. 900     M.NAME$(16)="WIGHT"
  91. 910     M.NAME$(17)="CARRION CRAWLER"
  92. 920     M.NAME$(18)="WEREWOLF"
  93. 930     M.NAME$(19)="ORGE"
  94. 940     M.NAME$(20)="HELLHOUND"
  95. 950     M.NAME$(21)="CAECILIA"
  96. 960     M.NAME$(22)="CROCODILE"
  97. 970     M.NAME$(23)="MUMMY"
  98. 980     M.NAME$(24)="WEREBEAR"
  99. 990     M.NAME$(25)="WYVERN"
  100. 1000     M.NAME$(26)="CAVE BEAR"
  101. 1010     M.NAME$(27)="SALAMANDER"
  102. 1020     M.NAME$(28)="GIANT SCORPION"
  103. 1030     M.NAME$(29)="SABRE-TOOTH TIGER"
  104. 1040     M.NAME$(30)="GORGON"
  105. 1050     M.NAME$(31)="VAMPIRE"
  106. 1060     M.NAME$(32)="TROLL"
  107. 1070     M.NAME$(33)="DEVIL SWINE"
  108. 1080     M.NAME$(34)="STONE GIANT"
  109. 1090     M.NAME$(35)="SPECTRE"
  110. 1100     M.NAME$(36)="RED DRAGON"
  111. 1110     M.NAME$(37)="CYCLOPS"
  112. 1120     M.NAME$(38)="PURPLE WORM"
  113. 1130     M.NAME$(39)="GOLEM"
  114. 1140     M.NAME$(40)="GOLD DRAGON"
  115. 1150     DIM M.AC(40)
  116. 1160 '    10=SILVER 20=MAGIC 30=MAGIC/FIRE 40=STAKE
  117. 1170     M.AC(1)=4
  118. 1180     M.AC(2)=2
  119. 1190     M.AC(3)=3
  120. 1200     M.AC(4)=1
  121. 1210     M.AC(5)=4
  122. 1220     M.AC(6)=3
  123. 1230     M.AC(7)=3
  124. 1240     M.AC(8)=4
  125. 1250     M.AC(9)=2
  126. 1260     M.AC(10)=4
  127. 1270     M.AC(11)=4
  128. 1280     M.AC(12)=5
  129. 1290     M.AC(13)=14
  130. 1300     M.AC(14)=4
  131. 1310     M.AC(15)=4
  132. 1320     M.AC(16)=13
  133. 1330     M.AC(17)=3
  134. 1340     M.AC(18)=16
  135. 1350     M.AC(19)=5
  136. 1360     M.AC(20)=6
  137. 1370     M.AC(21)=4
  138. 1380     M.AC(22)=7
  139. 1390     M.AC(23)=37
  140. 1400     M.AC(24)=18
  141. 1410     M.AC(25)=7
  142. 1420     M.AC(26)=7
  143. 1430     M.AC(27)=8
  144. 1440     M.AC(28)=8
  145. 1450     M.AC(29)=4
  146. 1460     M.AC(30)=8
  147. 1470     M.AC(31)=48
  148. 1480     M.AC(32)=6
  149. 1490     M.AC(33)=17
  150. 1500     M.AC(34)=6
  151. 1510     M.AC(35)=22
  152. 1520     M.AC(36)=10
  153. 1530     M.AC(37)=5
  154. 1540     M.AC(38)=4
  155. 1550     M.AC(39)=24
  156. 1560     M.AC(40)=10
  157. 1570     DIM M.MV(40)
  158. 1580    M.MV(1)=12
  159. 1590    M.MV(2)=4
  160. 1600    M.MV(3)=12
  161. 1610    M.MV(4)=4
  162. 1620    M.MV(5)=8
  163. 1630    M.MV(6)=4
  164. 1640    M.MV(7)=4
  165. 1650    M.MV(8)=6
  166. 1660    M.MV(9)=8
  167. 1670    M.MV(10)=8
  168. 1680    M.MV(11)=8
  169. 1690    M.MV(12)=4
  170. 1700    M.MV(13)=8
  171. 1710    M.MV(14)=6
  172. 1720    M.MV(15)=8
  173. 1730    M.MV(16)=6
  174. 1740    M.MV(17)=8
  175. 1750    M.MV(18)=12
  176. 1760    M.MV(19)=6
  177. 1770    M.MV(20)=8
  178. 1780    M.MV(21)=8
  179. 1790    M.MV(22)=6
  180. 1800    M.MV(23)=4
  181. 1810    M.MV(24)=8
  182. 1820    M.MV(25)=6
  183. 1830    M.MV(26)=8
  184. 1840    M.MV(27)=16
  185. 1850    M.MV(28)=10
  186. 1860    M.MV(29)=10
  187. 1870    M.MV(30)=8
  188. 1880    M.MV(31)=8
  189. 1890    M.MV(32)=8
  190. 1900    M.MV(33)=12
  191. 1910    M.MV(34)=8
  192. 1920    M.MV(35)=10
  193. 1930    M.MV(36)=6
  194. 1940    M.MV(37)=6
  195. 1950    M.MV(38)=4
  196. 1960    M.MV(39)=12
  197. 1970    M.MV(40)=6
  198. 1980    DIM M.NBR(40,2)
  199. 1990    M.NBR(1,1)=1:M.NBR(1,2)=20
  200. 2000    M.NBR(2,1)=5:M.NBR(2,2)=20
  201. 2010    M.NBR(3,1)=2:M.NBR(3,2)=20
  202. 2020    M.NBR(4,1)=2:M.NBR(4,2)=8
  203. 2030    M.NBR(5,1)=1:M.NBR(5,2)=8
  204. 2040    M.NBR(6,1)=4:M.NBR(6,2)=8
  205. 2050    M.NBR(7,1)=3:M.NBR(7,2)=12
  206. 2060    M.NBR(8,1)=1:M.NBR(8,2)=6
  207. 2070    M.NBR(9,1)=2:M.NBR(9,2)=8
  208. 2080    M.NBR(10,1)=2:M.NBR(10,2)=8
  209. 2090    M.NBR(11,1)=2:M.NBR(11,2)=8
  210. 2100    M.NBR(12,1)=2:M.NBR(12,2)=8
  211. 2110    M.NBR(13,1)=1:M.NBR(13,2)=8
  212. 2120    M.NBR(14,1)=1:M.NBR(14,2)=8
  213. 2130    M.NBR(15,1)=1:M.NBR(15,2)=4
  214. 2140    M.NBR(16,1)=1:M.NBR(16,2)=6
  215. 2150    M.NBR(17,1)=1:M.NBR(17,2)=3
  216. 2160    M.NBR(18,1)=1:M.NBR(18,2)=6
  217. 2170    M.NBR(19,1)=1:M.NBR(19,2)=6
  218. 2180    M.NBR(20,1)=2:M.NBR(20,2)=8
  219. 2190    M.NBR(21,1)=1:M.NBR(21,2)=3
  220. 2200    M.NBR(22,1)=1:M.NBR(22,2)=4
  221. 2210    M.NBR(23,1)=1:M.NBR(23,2)=4
  222. 2220    M.NBR(24,1)=1:M.NBR(24,2)=4
  223. 2230    M.NBR(25,1)=1:M.NBR(25,2)=2
  224. 2240    M.NBR(26,1)=1:M.NBR(26,2)=2
  225. 2250    M.NBR(27,1)=2:M.NBR(27,2)=5
  226. 2260    M.NBR(28,1)=1:M.NBR(28,2)=6
  227. 2270    M.NBR(29,1)=1:M.NBR(29,2)=4
  228. 2280    M.NBR(30,1)=1:M.NBR(30,2)=2
  229. 2290    M.NBR(31,1)=1:M.NBR(31,2)=4
  230. 2300    M.NBR(32,1)=1:M.NBR(32,2)=8
  231. 2310    M.NBR(33,1)=1:M.NBR(33,2)=3
  232. 2320    M.NBR(34,1)=1:M.NBR(34,2)=2
  233. 2330    M.NBR(35,1)=1:M.NBR(35,2)=4
  234. 2340    M.NBR(36,1)=1:M.NBR(36,2)=1
  235. 2350    M.NBR(37,1)=1:M.NBR(37,2)=1
  236. 2360    M.NBR(38,1)=1:M.NBR(38,2)=2
  237. 2370    M.NBR(39,1)=1:M.NBR(39,2)=1
  238. 2380    M.NBR(40,1)=1:M.NBR(40,2)=1
  239. 2390    DIM M.DAM(40,2): MX=0
  240. 2400 '   10=POISON 20=PARALSYS 30=ENERGY DRAIN 1 LVL  40=ENERGY DRAIN 2 LEVELS
  241. 2410 '    50=FIRE 60=TURN TO STONE 70=???        80=DRAGON FIRE
  242. 2420    M.DAM(1,1)=0:M.DAM(1,2)=0
  243. 2430    M.DAM(2,1)=1:M.DAM(2,2)=2
  244. 2440    M.DAM(3,1)=1:M.DAM(3,2)=3
  245. 2450    M.DAM(4,1)=10:M.DAM(4,2)=0
  246. 2460    M.DAM(5,1)=1:M.DAM(5,2)=6
  247. 2470    M.DAM(6,1)=1:M.DAM(6,2)=4
  248. 2480    M.DAM(7,1)=1:M.DAM(7,2)=6
  249. 2490    M.DAM(8,1)=21:M.DAM(8,2)=3
  250. 2500    M.DAM(9,1)=1:M.DAM(9,2)=8
  251. 2510    M.DAM(10,1)=1:M.DAM(10,2)=6
  252. 2520    M.DAM(11,1)=1:M.DAM(11,2)=6
  253. 2530    M.DAM(12,1)=2:M.DAM(12,2)=7
  254. 2540    M.DAM(13,1)=1:M.DAM(13,2)=4
  255. 2550    M.DAM(14,1)=11:M.DAM(14,2)=4
  256. 2560    M.DAM(15,1)=3:M.DAM(15,2)=12
  257. 2570    M.DAM(16,1)=30:M.DAM(16,2)=0
  258. 2580    M.DAM(17,1)=20:M.DAM(17,2)=0
  259. 2590    M.DAM(18,1)=2:M.DAM(18,2)=8
  260. 2600    M.DAM(19,1)=2:M.DAM(19,2)=20
  261. 2610    M.DAM(20,1)=55:M.DAM(20,2)=10
  262. 2620    M.DAM(21,1)=2:M.DAM(21,2)=16
  263. 2630    M.DAM(22,1)=4:M.DAM(22,2)=32
  264. 2640    M.DAM(23,1)=22:M.DAM(23,2)=22
  265. 2650    M.DAM(24,1)=9:M.DAM(24,2)=64
  266. 2660    M.DAM(25,1)=16:M.DAM(25,2)=44
  267. 2670    M.DAM(26,1)=8:M.DAM(26,2)=56
  268. 2680    M.DAM(27,1)=6:M.DAM(27,2)=32
  269. 2690    M.DAM(28,1)=16:M.DAM(28,2)=48
  270. 2700    M.DAM(29,1)=9:M.DAM(29,2)=80
  271. 2710    M.DAM(30,1)=64:M.DAM(30,2)=24
  272. 2720    M.DAM(31,1)=42:M.DAM(31,2)=20
  273. 2730    M.DAM(32,1)=6:M.DAM(32,2)=44
  274. 2740    M.DAM(33,1)=4:M.DAM(33,2)=24
  275. 2750    M.DAM(34,1)=6:M.DAM(34,2)=36
  276. 2760    M.DAM(35,1)=42:M.DAM(35,2)=16
  277. 2770    M.DAM(36,1)=82:M.DAM(36,2)=92
  278. 2780    M.DAM(37,1)=2:M.DAM(37,2)=60
  279. 2790    M.DAM(38,1)=12:M.DAM(38,2)=48
  280. 2800    M.DAM(39,1)=9:M.DAM(39,2)=74
  281. 2810    M.DAM(40,1)=89:M.DAM(40,2)=92
  282. 2820 RETURN
  283. 2830 'GET PLAYERS & LOAD PLAYER DATA
  284. 2840     OPEN "DUNCHAR" AS #1 LEN=122
  285. 2850     FIELD #1,2 AS STRN$,2 AS INTL$,2 AS WIS$,2 AS DEX$,2 AS CON$,2 AS CHA$, 10 AS CLAS$,2 AS HIT$,4 AS MONEY$,2 AS LVL$,2 AS ARM$,2 AS SV.POISON$,2 AS SV.MAGIC$,2 AS SV.STONE$,2 AS SV.DRAG$,2 AS SV.SPELL$,4 AS EXPR$,24 AS NM$,7 AS ALIGN$,45 AS D$
  286. 2860     OPEN "DUNSHOP" AS #2 LEN=44
  287. 2870     FIELD #2,2 AS SID$,1 AS SCLASS$,15 AS SNAME$,2 AS SCOST$,2 AS SDAM$,2 AS SWT$,2 AS P1$,2 AS P2$,2 AS P3$,2 AS P4$,2 AS P5$,2 AS P6$,2 AS P7$,2 AS P8$,2 AS P9$,2 AS P10$
  288. 2880    DIM P.NAME$(9): DIM P.CLASS$: DIM P(9,13): DIM GP!(9)
  289. 2890 '  P(1)=WEIGHT, P(2)=STRENGTH P(3)=HIT POINTS P(4)=LEVEL P(5)=ARMOR CLASS          P(6)=VERTICAL POSITION P(7)=HORIZONAL POSITION P(8)=RIGHT HAND P(9)=LEFT        P(10)=LIGHT P(11)=ROOM  P(12)=ROOM P(13) RESTING
  290. 2900    DIM S.NAME$(40): DIM S(40,12): DIM S.CLASS$(40)
  291. 2910 '  S(1)=DAMAGE S(2)=WEIGHT S(3)-S(11) = PLAYERS   S(12)=COST
  292. 2920    S=0    'LOAD SUPPLIES
  293. 2930    S=S+1
  294. 2940    GET #2,S
  295. 2950    IF SID$ <> "DS" THEN SMAX=S-1: GOTO 3010
  296. 2960    S.NAME$(S)=SNAME$: S.CLASS$(S) = SCLASS$: S(S,1)=CVI(SDAM$):                    S(S,2)=CVI(SWT$)
  297. 2970    S(S,3)=CVI(P1$): S(S,4)=CVI(P2$): S(S,5)=CVI(P3$): S(S,6)=CVI(P4$)
  298. 2980    S(S,7)=CVI(P5$): S(S,8)=CVI(P6$): S(S,9)=CVI(P7$): S(S,10)=CVI(P8$)
  299. 2990    S(S,11)=CVI(P9$): S(S,12)=CVI(SCOST$)
  300. 3000    GOTO 2930
  301. 3010    COLOR 0,4,4: CLS: BEEP
  302. 3020    INPUT "ENTER NUMBER OF PLAYERS ",PLAYERS
  303. 3030    FOR PX = 1 TO PLAYERS
  304. 3040            GOSUB 3080 'GET PLAYER
  305. 3050    NEXT
  306. 3060    LV.ADJ = INT(T.LVL/PLAYERS)
  307. 3070 RETURN
  308. 3080 'GET PLAYER
  309. 3090    PRINT "ENTER PLAYER NUMBER ";PX;
  310. 3100    INPUT P
  311. 3110    IF P <1 OR P >9 THEN GOTO 3090
  312. 3120    GET #1,P
  313. 3130    IF NM$ = SPACE$(24) THEN PRINT P;"NOT VALID": GOTO 3080
  314. 3140    PRINT "YOU ARE ";NM$
  315. 3150    PRINT "(Yes/No)"
  316. 3160    GOSUB 4510 'GET REPLY
  317. 3170    IF REPLY$ <> "Y" THEN GOTO 3080
  318. 3180    FOR S = 1 TO SMAX     'GET WEIGHT OF SUPPLIES
  319. 3190            P(P,1)=P(P,1)+(S(S,P+2) * S(S,2))
  320. 3200    NEXT
  321. 3210    P.NAME$(P) = NM$: P.CLASS$(P)=CLAS$
  322. 3220    P(P,4) = CVI(LVL$): P(P,2)=CVI(STRN$)
  323. 3230    P(P,3)=CVI(HIT$):
  324. 3240    T.LVL = T.LVL+P(P,4)
  325. 3250    PRINT "WHAT ARMOR ARE YOU WEARING ";NM$
  326. 3260    INPUT A$
  327. 3270    IF A$="" THEN P(P,5) = CVI(ARM$): GOTO 3350
  328. 3280 '
  329. 3290    SK$=A$
  330. 3300    GOSUB 4290 'MATCH TO SUPPLY FILE
  331. 3310    IF FOUND = 0 THEN GOTO 3250
  332. 3320    IF S.CLASS$(S) <> "A" THEN GOTO 3250
  333. 3330    P(P,5)=S(S,1)+CVI(ARM$)  'GET ARMOR CLASS
  334. 3340    IF P(P,5)>10 THEN P(P,5)=10
  335. 3350 'GET WEAPONS
  336. 3360    PRINT "WHAT DO YOU HAVE IN YOUR RIGHT HAND?"
  337. 3370    INPUT A$
  338. 3380    IF A$="" THEN P(P,8) = 0: GOTO 3470
  339. 3390 '
  340. 3400    SK$=A$
  341. 3410    GOSUB 4290 'MATCH TO SUPPLY FILE
  342. 3420    IF FOUND = 0 THEN MSG$="": GOSUB 4600: GOTO 3350
  343. 3430    P(P,8) = S: S(S,P+2)=S(S,P+2)-1
  344. 3440    IF S=13 THEN P(P,10)=40 'LANTERN
  345. 3450    IF S=14 THEN P(P,10)=10 'TORCH
  346. 3460    IF S=4 THEN P(P,5)=P(P,5)+1 'SHIELD
  347. 3470    PRINT "WHAT DO YOU HAVE IN YOUR LEFT HAND?"
  348. 3480    INPUT A$
  349. 3490    IF A$="" THEN P(P,9) = 0: GOTO 3580
  350. 3500 '
  351. 3510    SK$=A$
  352. 3520    GOSUB 4290 'MATCH TO SUPPLY FILE
  353. 3530    IF FOUND = 0 THEN MSG$="": GOSUB 4600: GOTO 3470
  354. 3540    P(P,9) = S: S(S,P+2)=S(S,P+2)-1
  355. 3550    IF S=4 THEN P(P,5)=P(P,5)+1  'SHIELD
  356. 3560    IF S=13 THEN P(P,10)=40 'LANTERN
  357. 3570    IF S=14 THEN P(P,10)=10 'TORCH
  358. 3580    IF S(33,P+2) <> 0 THEN P(P,5)=P(P,5)-4 'CARTER'S CURSE
  359. 3590 RETURN
  360. 3600 'PLACE MONSTERS & TREASURE
  361. 3610    RX = 0
  362. 3620 'CHECK EACH ROOM
  363. 3630    RX = RX+1
  364. 3640    IF R(RX,1) = 0 THEN GOTO 3700
  365. 3650    DEP = R(RX,3)-R(RX,1)
  366. 3660    WID = R(RX,4)-R(RX,2)
  367. 3670    SIZ=(DEP-1)*(WID-1)
  368. 3680    GOSUB 3710 'STOCK A ROOM
  369. 3690    GOTO 3620
  370. 3700 RETURN
  371. 3710 'STOCK A ROOM
  372. 3720     RANDOMIZE TIMER
  373. 3730    TX=0
  374. 3740    ROLL = INT(RND*6)+1
  375. 3750    IF ROLL < 4 THEN GOSUB 3800: GOTO 3790 'GET A MONSTER
  376. 3760    IF ROLL = 4 THEN GOSUB 4060: GOTO 3790 'GET A TRAP
  377. 3770    IF ROLL = 5 THEN GOSUB 4160: GOTO 3790 'GET A TREASURE
  378. 3780    ROLL = INT(RND*6)+1: IF ROLL =1 THEN GOSUB 4060
  379. 3790 RETURN
  380. 3800 'GET A MONSTER
  381. 3810    DEP = R(RX,3)-R(RX,1)
  382. 3820    WID = R(RX,4)-R(RX,2)
  383. 3830    SIZ=(DEP-1)*(WID-1)
  384. 3840    WK.LV =((INT(RX/4)+LV.ADJ)-1)
  385. 3850    MX = (INT(RND*4)+1)+(4*(WK.LV)): IF MX>40 THEN MX=40
  386. 3860    WK = MX+60
  387. 3870    NBR = INT(RND*M.NBR(MX,2))+M.NBR(MX,1)
  388. 3880    IF NBR > M.NBR(MX,2) THEN NBR=M.NBR(MX,2)
  389. 3890    IF NBR > SIZ THEN NBR = SIZ-4
  390. 3900    FOR ZZ = 1 TO NBR
  391. 3910      V = (INT(RND*DEP)+1)+R(RX,1)
  392. 3920      H = (INT(RND*WID)+1)+R(RX,2)
  393. 3930      IF M(V,H) <> 32 GOTO 3910
  394. 3940      ML.MAX=ML.MAX+1: ML(ML.MAX,1)=V: ML(ML.MAX,2)=H
  395. 3950      ML(ML.MAX,3)=RX: ML(ML.MAX,4)=INT((MX/4)+1)
  396. 3960      M(V,H) = WK
  397. 3970      MH=(H*8)-8: MV=(V*8)-8
  398. 3980      DRAW "BM=MH;,=MV;": DRAW "BR3;D4;F2;H2;G2"
  399. 3990      DRAW "BM=MH;,=MV;": DRAW "BR3;D2;L2;R4"
  400. 4000      R(RX,5)=MX: R(RX,6)=R(RX,6)+1 'SAVE MONSTER & NUMBER
  401. 4010    NEXT
  402. 4020    ROLL = INT(RND*6)+1
  403. 4030    IF ROLL < 4 THEN TX = (MX/4) +(MX-INT(MX/4)): IF TX>19 THEN TX=19
  404. 4040    IF ROLL < 4 THEN GOSUB 4160
  405. 4050 RETURN
  406. 4060 'GET A TRAP
  407. 4070    CT=0
  408. 4080    IF CT=20 GOTO 4150
  409. 4090      V = (INT(RND*DEP)+1)+R(RX,1)
  410. 4100      H = (INT(RND*WID)+1)+R(RX,2)
  411. 4110      IF M(V,H) <> 32 THEN CT=CT+1: GOTO 4080
  412. 4120      M(V,H) = 0: CT=0
  413. 4130    ROLL = INT(RND*6)+1
  414. 4140    IF ROLL < 3 THEN GOSUB 4160
  415. 4150 RETURN
  416. 4160 'GET A TREASURE
  417. 4170    CT=0
  418. 4180    IF TX <> 0 THEN GOTO 4200
  419. 4190    TX=(INT(RX/3)+LV.ADJ)*((RND*4)+1): IF TX>19 THEN TX=19
  420. 4200      WK = TX
  421. 4210    IF CT=20 GOTO 4280
  422. 4220      V = (INT(RND*DEP)+1)+R(RX,1)
  423. 4230      H = (INT(RND*WID)+1)+R(RX,2)
  424. 4240      IF M(V,H) <> 32 THEN CT=CT+1: GOTO 4210
  425. 4250      M(V,H) = WK: CT=0
  426. 4260      MH=(H*8)-8: MV=(V*8)-8: DRAW "C3"
  427. 4270      DRAW "BM=MH;,=MV;": DRAW "BR4;F3;D4;L6;U4;E3"
  428. 4280 RETURN
  429. 4290 'MATCH TO SUPPLY FILE
  430. 4300    LX=LEN(SK$)
  431. 4310    FOR S = 1 TO SMAX
  432. 4320      IF (SK$ = LEFT$(S.NAME$(S),LX)) AND (S(S,P+2) <> 0)                                         THEN FOUND=1: GOTO 4350
  433. 4330    NEXT
  434. 4340    FOUND = 0: MSG$="YOU DON'T OWN A "+SK$: GOSUB 4600: MSG$="": GOSUB 4600:         GOTO 4350
  435. 4350 RETURN
  436. 4360 'GET INITIAL LOCATION OF PLAYERS
  437. 4370    PAINT (0,0),1,3
  438. 4380    V=1
  439. 4390    H=1
  440. 4400    FOR P = 9 TO 1 STEP -1
  441. 4410            IF P.NAME$(P) = "" THEN GOTO 4480
  442. 4420            M(V,H) = P+48
  443. 4430            P(P,6)=V
  444. 4440            P(P,7)=H
  445. 4450            LOCATE V,H
  446. 4460            PRINT CHR$(M(V,H));
  447. 4470            V=V+1
  448. 4480    NEXT
  449. 4490    LV=1
  450. 4500 RETURN
  451. 4510 'GET A REPLY
  452. 4520    REPLY$=INKEY$: IF REPLY$=""  THEN GOTO 4520
  453. 4530    IF LEN(REPLY$)=1 THEN GOTO 4590
  454. 4540    REPLY$=RIGHT$(REPLY$,1)
  455. 4550    IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 4590
  456. 4560    IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 4590
  457. 4570    IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 4590
  458. 4580    IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29)
  459. 4590 RETURN
  460. 4600 'MESSAGE
  461. 4610    IF TIMER < SV.TIMER! THEN GOTO 4610
  462. 4620    MS$=SPACE$(39)
  463. 4630    LSET MS$=MSG$
  464. 4640    LOCATE 25,1
  465. 4650    PRINT MS$;
  466. 4660    SV.TIMER!=TIMER+2
  467. 4670 RETURN
  468.